package page;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import ressource.CadreProduit;
import ressource.CadreVente;

/**
 * Servlet implementation class listeNotifs
 */
public class listeNotifs extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public listeNotifs() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		RequestDispatcher dis;
		Connection con = null;
		Context namingContext = null;
		DataSource dataSource = null;
		
		//Si je ne suis pas connecté alors je suis redirigé
		Integer membre = (Integer)session.getAttribute("user_id");
		if(membre == null){
			dis = request.getRequestDispatcher("/login.jsp");
			dis.forward(request, response);
			return;
		}
		
		try {
			namingContext = new InitialContext();
			dataSource = (DataSource)namingContext.lookup("java:comp/env/jdbc/MiniIBay");
			con = dataSource.getConnection();
			
			PreparedStatement pstmt = con.prepareStatement("SELECT p.id_produit, p.intitule, p.photo, p.description, v.id_vente FROM message_vente mv, vente v, annonce a, produit p WHERE mv.id_vente = v.id_vente AND (v.id_acheteur = ? OR (v.id_annonce = a.id_annonce AND a.id_vendeur = ?)) AND mv.id_message NOT IN (SELECT id_message FROM message_vente_vu WHERE id_membre = ?) AND p.id_produit = a.id_produit");
			pstmt.setInt(1, membre);
			pstmt.setInt(2, membre);
			pstmt.setInt(3, membre);
			
			ResultSet rs  = pstmt.executeQuery();
			
			List<CadreVente> ventes = new ArrayList<CadreVente>();
			List<CadreProduit> produits = new ArrayList<CadreProduit>();
			while(rs.next()) {
				CadreProduit produit = new CadreProduit();
				produit.setId(rs.getInt("id_produit"));
				produit.setIntitule(rs.getString("intitule"));
				produit.setPhoto(rs.getString("photo"));
				produit.setDescription(rs.getString("description"));
				produits.add(produit);
			}
			rs.close();
			
			pstmt = con.prepareStatement("SELECT p.id_produit, p.intitule, p.photo, p.description, a.id_annonce FROM message_annonce ma, annonce a, produit p WHERE ma.id_annonce IN (SELECT DISTINCT ma1.id_annonce FROM message_annonce ma1, annonce a WHERE ma1.id_membre = ? OR (a.id_annonce = ma1.id_annonce AND a.id_vendeur = ?)) AND ma.id_annonce NOT IN (SELECT mav.id_message FROM message_annonce_vu mav WHERE mav.id_membre = ?) AND ma.id_annonce = a.id_annonce AND a.id_produit = p.id_produit");
			pstmt.setInt(1, membre);
			pstmt.setInt(2, membre);
			pstmt.setInt(3, membre);
			
			rs  = pstmt.executeQuery();
			while(rs.next()) {
				CadreProduit produit = new CadreProduit();
				produit.setId(rs.getInt("id_produit"));
				produit.setIntitule(rs.getString("intitule"));
				produit.setPhoto(rs.getString("photo"));
				produit.setDescription(rs.getString("description"));
				produit.setAnnonceLiee(rs.getInt("id_annonce"));
				produits.add(produit);
			}
			rs.close();
			request.setAttribute("ventes", ventes);
			request.setAttribute("produits", produits);
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		dis=request.getRequestDispatcher("listnotifs.jsp");
		dis.forward(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
